import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

/**
 * @description 自定义拦截器，用于统一格式化 HTTP 响应。
 * @implements {NestInterceptor}
 */
@Injectable()
export class Interceptor_ResponseFormat_Base implements NestInterceptor {
  /**
   * 拦截器方法，用于在处理请求之后修改响应格式。
   * @param {ExecutionContext} context - 执行上下文。
   * @param {CallHandler} next - 调用处理器。
   * @returns {Observable<any>} - 返回一个 Observable 对象，包含格式化的响应。
   */
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    return next.handle().pipe(
      map((data) => ({
        statusCode: context.switchToHttp().getResponse().statusCode,
        data: data.data,
      })),
    );
  }
}
